home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / libmem.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  4KB  |  146 lines

  1. /*
  2.  *    @(#) libmem.c 12.1 95/05/09 
  3.  */
  4. /***************************************************************************
  5.  *
  6.  *    Copyright (c) 1990        The Santa Cruz Operation, Inc.
  7.  *
  8.  *    All rights reserved.  No part of this program or publication may be
  9.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  10.  *    or translated into any language or computer language, in any form or
  11.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  12.  *    biological, or otherwise, without the prior written permission of:
  13.  *    
  14.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  15.  *        400 Encinal St., Santa Cruz, California 95060 USA
  16.  *
  17.  **************************************************************************/
  18. /*
  19.  * S000, 30-Sep-92, rickra
  20.  *     Added copyright and modification history
  21.  */
  22. /*LINTLIBRARY*/
  23. /*+-------------------------------------------------------------------------
  24.     libmem.c -- /dev/mem routines for SCO UNIX/386 (maybe other *NIX)
  25.     ...!{gatech,emory}!n4hgf!wht
  26.  
  27.   Defined functions:
  28.     minit(write_needed)
  29.     mread(caddr,maddr,len)
  30.     mwrite(maddr,caddr,len)
  31.  
  32.  routines were originally written by Mike "Ford" Ditto: kudos!!!
  33. --------------------------------------------------------------------------*/
  34. /*+:EDITS:*/
  35. /*:09-25-1990-05:11-wht@n4hgf-release heh-heh x0.22 preliminary */
  36. /*:09-20-1990-00:09-wht@n4hgf-scales, sysinfo/minfo, bootinfo working */
  37. /*:09-15-1990-06:33-wht@n4hgf-adopt u386mon libraries */
  38. /*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
  39. /*:08-07-1990-14:24-wht@n4hgf-nba@sysware.sysware.dk S5R31 updates */
  40. /*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
  41. /*:07-28-1990-18:06-wht@n4hgf-2.10 release */
  42. /*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
  43. /*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  44. /*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  45. /*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  46. /*:12-07-1988-22:06-wht-put in test for initialized fdmem */
  47. /*:10-27-1988-22:44-wht-creation of file */
  48.  
  49. #include <sys/types.h>
  50. #include <fcntl.h>
  51. #include "include/libmem.h"
  52.  
  53. void            leave_text ();
  54.  
  55. extern int      errno;
  56.  
  57. static int      fdmem = -2;
  58. daddr_t         lseek ();
  59.  
  60. /*+-------------------------------------------------------------------------
  61.     minit(write_needed)
  62. --------------------------------------------------------------------------*/
  63. void
  64. minit (write_needed)
  65.      int             write_needed;
  66. {
  67.   if (fdmem >= 0)
  68.     return;
  69.   if ((fdmem = open ("/dev/mem", O_RDONLY, 0)) < 0)
  70.     leave_text ("can't open /dev/mem", fdmem);
  71. /*
  72.     if((fdmem=open("/dev/mem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
  73.         leave_text("can't open /dev/mem",fdmem);
  74. */
  75.  
  76. }                /* end of minit */
  77.  
  78. /*+-------------------------------------------------------------------------
  79.     mread(caddr,maddr,len)
  80. --------------------------------------------------------------------------*/
  81. void
  82. mread (caddr, maddr, len)
  83.      caddr_t         caddr;
  84.      daddr_t         maddr;
  85.      int             len;
  86. {
  87.   char            s80[80];
  88.  
  89. #if defined(M_I286)
  90.   maddr &= 0xFFFFL;
  91. #endif
  92.  
  93.   if (fdmem == -2)
  94.     leave_text ("minit() not called", 1);
  95.  
  96.   if (lseek (fdmem, maddr, 0) == -1L)
  97.     {
  98.       (void) sprintf (s80, "mem seek err (%08lx)", maddr);
  99.       leave_text (s80, 1);
  100.     }
  101.  
  102.   if (read (fdmem, caddr, len) != len)
  103.     {
  104.       (void) sprintf (s80,
  105.           "mem read errno %d len %d addr %08lx", errno, len, maddr);
  106.       leave_text (s80, 1);
  107.     }
  108. }                /* end of mread */
  109.  
  110. /*+-------------------------------------------------------------------------
  111.     mwrite(maddr,caddr,len)
  112. --------------------------------------------------------------------------*/
  113. #ifdef MWRITE_NEEDED
  114. void
  115. mwrite (maddr, caddr, len)
  116.      daddr_t         maddr;
  117.      caddr_t         caddr;
  118.      int             len;
  119. {
  120.   char            s80[80];
  121.  
  122. #if defined(M_I286)
  123.   maddr &= 0xFFFFL;
  124. #endif
  125.  
  126.   if (fdmem == -2)
  127.     leave_text ("minit() not called", 1);
  128.  
  129.   if (lseek (fdkmem, kaddr, 0) == -1L)
  130.     {
  131.       (void) sprintf (s80,
  132.               "/dev/kmem seek error addr %08lx", kaddr);
  133.       leave_text (s80, 255);
  134.     }
  135.   if (write (fdkmem, caddr, len) != len)
  136.     {
  137.       (void) sprintf (s80,
  138.           "/dev/kmem write error addr %08lx len %08lx", kaddr, len);
  139.       leave_text (s80, 255);
  140.     }
  141. }                /* end of mwrite */
  142.  
  143. #endif                /* MWRITE_NEEDED */
  144.  
  145. /* vi: set tabstop=4 shiftwidth=4: */
  146.